package it.pir.es11ChatWSRest;

import javax.ws.rs.*;
import java.util.*;

@Path("/chat/{username}")
public class Chat {
	
	//Creo una Map statica, in questo modo � una variabile di classe comune a tutti gli oggetti
	private static Map<String, Connection> clients;
	
	
	
	//Metodo che ritorna un oggetto Connection quando viene invocata una GET
	@GET
	@Produces("application/xml")
	public Connection getConnection(@PathParam("username") String username) {
		
		if(clients.containsKey(username))
			throw new RuntimeException("Utente gia' presente!");
		
		//Creo l'oggetto Connection
		Connection connection = new Connection(this, username);
		
		//Inserisco username e connection alla mia Map
		clients.put(username, connection);
		
		return connection;
	}
	
	//Metodo che ritorna la lista dei nomi degli utenti connessi
	public List<String> getUsersList() {
		return new ArrayList<String>(clients.keySet());
	}
	
	//Metodo che mi restituisce una lista degli oggetti Connection dei vari utenti
	/*L'unico problema di ritornare la lista degli oggetti connection � che teoricamente un determinato
	 * client potrebbe raggirare la chat e parlare a nome di un altro utente, utilizzando il suo oggetto
	 * connection. Si potrebbe salvarsi una lista degli oggetti Client?
	 */
	public List<Connection> getConnectionUsersList() {
		return new ArrayList<Connection>(clients.values());
	}
	
}
